import java.awt.Dialog;
import java.awt.Dimension;
import java.util.Iterator;
import java.util.List;

import javax.swing.JFrame;

import torque.generated.Echiquier;
import torque.generated.Vaisseau;

import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JSeparator;
import javax.swing.JSplitPane;

import org.apache.torque.TorqueException;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

//Ici on lance la partie 
//1-création de la grille
//2-Choix des vaisseau par chaque concurent ---> Appel de la vueChoixVaisseau
//3-on lance le jeu
public class VueLancementJeu extends Vue{
	private JTextField txtFieldLongueur;
	private JTextField txtFieldLargeur;
	private JButton btnSelectJ1;
	private JButton btnSelectJ2;
	private JButton btnAnnuler;
	private JSplitPane splitPane;
	private JLabel lblJoueur2;
	private JLabel lblJoueur1;
	private JSeparator separator;
	private JLabel lblChoixVaisseaux;
	private JLabel lblLongueur;
	private JLabel lblLargeur;
	private JLabel lblCreaGrille;
	private JLabel lblNomVaisseauJ1;
	private JLabel lblNomVaisseauJ2;
	private JButton btnLancer;
	Vaisseau vJoueur1 = new Vaisseau();
	Vaisseau vJoueur2 = new Vaisseau();
	
		public VueLancementJeu(Controleur controleur) throws Exception {
		super(controleur);
		setTitle("Lancemen partie");
		// Affichage de la fenêtre non redimensionable
		setLocationRelativeTo(this.getParent());
		setVisible(true);
		setResizable(false);
		// Affectation de la dimension minimale pour la fenêtre
		Dimension dimMini = new Dimension();
		dimMini.height = 365;
		dimMini.width = 340;
		setMinimumSize(dimMini);
		// Ajout du layout a la fenêtre (position absolue)
		getContentPane().setLayout(null);
		
		lblCreaGrille = new JLabel("Création de la Grille de jeu :");
		lblCreaGrille.setBounds(12, 12, 244, 15);
		getContentPane().add(lblCreaGrille);
		
		lblLongueur = new JLabel("Longueur :"); //Taille max
		lblLongueur.setBounds(37, 39, 91, 15);
		getContentPane().add(lblLongueur);
		
		txtFieldLongueur = new JTextField();
		txtFieldLongueur.setBounds(152, 37, 114, 19);
		getContentPane().add(txtFieldLongueur);
		txtFieldLongueur.setColumns(10);
		
		
		lblLargeur = new JLabel("Largeur :"); //Taille max
		lblLargeur.setBounds(37, 66, 71, 15);
		getContentPane().add(lblLargeur);
		
		txtFieldLargeur = new JTextField();
		txtFieldLargeur.setBounds(152, 64, 114, 19);
		getContentPane().add(txtFieldLargeur);
		txtFieldLargeur.setColumns(10);
		
		lblChoixVaisseaux = new JLabel("Choix du vaisseau :");
		lblChoixVaisseaux.setBounds(12, 105, 179, 15);
		getContentPane().add(lblChoixVaisseaux);
		
		lblJoueur1 = new JLabel("Joueur 1");
		lblJoueur1.setBounds(37, 136, 61, 15);
		getContentPane().add(lblJoueur1);
		
		btnSelectJ1 = new JButton("Sélectionner");
		btnSelectJ1.setBounds(149, 131, 173, 25);
		btnSelectJ1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				try {
					getControleur().lancerVueChoixVaisseau(VueLancementJeu.this,true);
				} catch (TorqueException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				VueLancementJeu.this.setVisible(false);
				VueLancementJeu.this.setEnabled(false);
			}
		});
		getContentPane().add(btnSelectJ1);
		
		lblJoueur2 = new JLabel("Joueur 2");
		lblJoueur2.setBounds(37, 224, 61, 15);
		getContentPane().add(lblJoueur2);
		
		btnSelectJ2 = new JButton("Selectionner");
		btnSelectJ2.setBounds(149, 219, 173, 25);
		btnSelectJ2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				try {
					getControleur().lancerVueChoixVaisseau(VueLancementJeu.this,false);
				} catch (TorqueException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				VueLancementJeu.this.setVisible(false);
				VueLancementJeu.this.setEnabled(false);
			}
		});
		getContentPane().add(btnSelectJ2);
		
		separator = new JSeparator();
		separator.setBounds(12, 205, 310, 7);
		getContentPane().add(separator);
		
		splitPane = new JSplitPane();
		splitPane.setBounds(12, 292, 310, 27);
		getContentPane().add(splitPane);
		
		btnAnnuler = new JButton("Annuler");
		btnAnnuler.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				getControleur().fermerVue(VueLancementJeu.this);
				try {
					getControleur().lancerVueMenuJeu();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
		splitPane.setLeftComponent(btnAnnuler);
		
		btnLancer = new JButton("C'est parti !");
		btnLancer.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				if(vJoueur1.getPtdegat()!=0 && vJoueur2.getPtattaque()!=0){
					if (!txtFieldLongueur.getText().isEmpty() && !txtFieldLargeur.getText().isEmpty()){
						if (Integer.parseInt(txtFieldLongueur.getText())<15 
						    && Integer.parseInt(txtFieldLargeur.getText())<15 
						    && Integer.parseInt(txtFieldLongueur.getText())>=4 
						    && Integer.parseInt(txtFieldLargeur.getText())>=4)
						{
							try {
								getControleur().fermerVue(VueLancementJeu.this);
								getControleur().lancerVueJeu(Integer.parseInt(txtFieldLongueur.getText()), Integer.parseInt(txtFieldLargeur.getText()), vJoueur1, vJoueur2);
							} catch (Exception e) {
								e.printStackTrace();
							}
						}
						else
							IO.Message("Erreur : Les valeurs de taille de la grille doivent être comprises entre 4 et 15");
					}
						else 
						IO.Message("Erreur : Vos devez donner une taille à la grille");
				}else
				 IO.Message("Erreur : Vous n'avez pas choisit de vaisseau");
			}
		});
		splitPane.setRightComponent(btnLancer);
		
		lblNomVaisseauJ1 = new JLabel("vaisseau à définir");
		lblNomVaisseauJ1.setBounds(12, 173, 131, 15);
		getContentPane().add(lblNomVaisseauJ1);
		
		lblNomVaisseauJ2 = new JLabel("vaisseau à définir");
		lblNomVaisseauJ2.setBounds(12, 261, 131, 15);
		getContentPane().add(lblNomVaisseauJ2);
		
	}
		
		public void setVaisseauJ1(Vaisseau vJ1){
			vJoueur1= vJ1;
			this.setLabelv1(vJoueur1.getNomv());
		}
		
		private void setLabelv1(String nomv) {
			lblNomVaisseauJ1.setText(nomv);			
		}

		public void setVaisseauJ2(Vaisseau vJ2){
			vJoueur2= vJ2;
			this.setLabelv2(vJoueur2.getNomv());
		}

		private void setLabelv2(String nomv) {
			lblNomVaisseauJ2.setText(nomv);			
		}
}
